package com.hys.demoaspect.aspect;

import com.hys.demoaspect.annotation.YMLog;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.lang.reflect.Modifier;
import java.util.Arrays;

/**
 * @PackageName com.hys.demoaspect.aspect
 * @Description
 */
@Component
@Aspect
public class MxLogAspect {
   private static Logger log =  LoggerFactory.getLogger(MxLogAspect.class);


    @Pointcut("@annotation(com.hys.demoaspect.annotation.YMLog)")
    private void pointcut() {}

    @Before("pointcut() && @annotation(logger)")
    public void advice1(JoinPoint joinPoint, YMLog logger) {
       // log..value().de("注解作用的方法名: " + joinPoint.getSignature().getName());

         log.debug(("所在类的简单类名: " +
                joinPoint.getSignature().getDeclaringType().getSimpleName()));

        //logger.debug("所在类的完整类名: " +
                joinPoint.getSignature().getDeclaringType();

        //logger.debug("目标方法的声明类型: " +
                Modifier.toString(joinPoint.getSignature().getModifiers());

        //  logger.debug("--- 日志的内容为" + logger.value() + " ---");
    }


    //这里还可以省略pointcut()方法，使用下面的写法
    @Before(value="@annotation(logger)")
    public void advice2(JoinPoint joinPoint, YMLog logger) {
        /*logger.debug("注解作用的方法名: " + joinPoint.getSignature().getName());

        logger.debug("所在类的简单类名: " +
                joinPoint.getSignature().getDeclaringType().getSimpleName());

        logger.debug("所在类的完整类名: " +
                joinPoint.getSignature().getDeclaringType());

        logger.debug("目标方法的声明类型: " +
                Modifier.toString(joinPoint.getSignature().getModifiers()));

        logger.debug("--- 日志的内容为" + logger.value() + " ---");*/
    }

    @Around("pointcut()")
    public void logs(JoinPoint point){

        String method_name = point.getSignature().getName();
        String class_name = point.getTarget().getClass().getName();
        // 执行方法的参数列表
        Object [] params = point.getArgs();
        if (method_name.toLowerCase().contains("submit") || method_name.toLowerCase().contains("update") || method_name.toLowerCase().contains("save")) {
        }
        log.info("【*** 记录操作日志-Before ***】 执行参数: "+ Arrays.toString(point.getArgs()));
    }
}




